/**
 * @file Ajax
 * @author yingzi
 */
import qs from 'qs';
import axios from 'axios';
// 构建默认参数
const defaultParams = function (p = {}) {
  const params = {
    _: new Date().getTime(),
  };
  return { ...params, ...p };
};

// 添加请求拦截器
axios.interceptors.request.use(
  function (config) {
    const prefix = config.url.indexOf('?') === -1 ? '?' : '&';
    // 所有请求附带默认参数
    const queryString = qs.stringify(defaultParams(config.param));
    if (queryString) {
      config.url += prefix + queryString;
    }
    return config;
  },
  function (error) {
    // 请求出错，这里表示上面的计算出现了问题，才会走入请求出错里面
    return Promise.reject(error);
  },
);

// 添加响应拦截器
axios.interceptors.response.use(
  (response) => {
    const data = response.data;
    if (data && +data.ok) {
      return data;
    }
    return Promise.reject(data);
  },
  // 相应出错，在使用上面出错了会把错误抛给catch，如果接口未返回，等等都会抛错误给catch
  function (error) {
    return Promise.reject({
      status: 0,
      data: error,
      msg: '请求出错',
    });
  },
);
//  导出ajax请求
export default {
  get(url = '', param = {}) {
    return axios({
      method: 'get',
      url: '/api' + url,
      param,
    });
  },
  post(url = '', data = {}) {
    return axios({
      method: 'post',
      url: '/api' + url,
      data,
    });
  },
  ajax(param) {
    return axios(param);
  },
};
